﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
//size_t my_strlen(const char* str)
//{
//    int count = 0;
//    assert(str != NULL);
//    while (*str != '\0')
//    {
//        count++;
//        str++;
//    }
//    return count;
//}
//int main()
//{
//    char arr[] = "abcdef";
//    size_t len = my_strlen(arr);
//    printf("%zd", len);
//    return 0;
//}
//size_t my_strlen(const char* str)
//{
//    //指针—指针为两个指针之间的元素个数
//    const char* start = str;
//    while (*str != '\0')
//    {
//        str++;
//    }
//    return str - start;
//}
//int main()
//{
//    char arr[] = "abcdef";
//    size_t len = my_strlen(arr);
//    printf("%zd", len);
//    return 0;
//}
//size_t my_strlen(const char* str)
//{
//    assert(str != NULL);
//        if (*str == '\0')
//            return 0;
//        else
//            return 1 + my_strlen(str + 1);
//}
//int main()
//{
//    char arr[] = "abcdef";
//    size_t len = my_strlen(arr);
//    printf("%zd", len);
//    return 0;
//}
//char* my_strcpy(char* dest, const char* src)
//{
//	char* ret = dest;
//	assert(dest);
//	assert(src);
//	while (*dest++ = *src++)
//	{
//		;
//	}
//	return ret;
//}
//int main()
//{
//	char arr[] = "hello abc";
//	char arr1[20] = "xxxxxxxxxxxxxxxx";
//	my_strcpy(arr1, arr);
//	printf("%s\n", arr1);
//	return 0;
//}
//#include <stdio.h>
////写⼀个代码求n的阶乘
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int i = 1;
//	int ret = 1;
//	for (i = 1; i <= n; i++)
//	{
//		ret *= i;
//	}
//	printf("%d\n", ret);
//	return 0;
//}
//int main()
//{
//	int n = 0;
//	int i = 0;
//	int ret = 1;
//	int sum = 0;
//	for (n = 1; n <= 10; n++)
//	{
//		ret = 1;
//		for (i = 1; i <= n; i++)
//		{
//			ret = ret * i;
//		}
//		sum = sum + ret;
//	}
//	printf("%d", sum);
//	return 0;
//}
//int main()
//{
//	int i = 0;
//	int n = 0;
//	int ret = 0;
//	int sum = 0;
//	for (i = 1; i <= 10; i++)
//	{
//		ret = 1;
//		for (n = 1; n <= i;n++)
//		{
//			ret = ret * n;
//		}
//		sum = sum + ret;
//	}
//	printf("%d", sum);
//	return 0;
//}
//int main()
//{
//	int i = 0;
//	int arr[10] = { 0 };
//	for (i = 0; i <= 12; i++)
//	{
//		arr[i] = 0;
//		printf("hehe\n");
//	}
//	return 0;
//}
//int F(int n)
//{
//	if (n <= 0)
//	
//		return 1;
//
//	
//	else
//	
//		return n * F(n - 1);
//	
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int ret = F(n);
//	printf("%d", ret);
//	return 0;
//}
//void P(int n)
//{
//	if (n > 9)
//	{
//		P(n / 10);
//	}
//		printf("%d ", n%10);
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	P(n);
//	return 0;
//}
//int test(int n)
//{
//    if (n <= 1000)
//        test(n + 1);
//    printf("%d ", n);
//}
//int main()
//{
//    test(1);
//    return 0;
//}
//int F(int n)
//{
//    int i = 0;
//    int ret = 1;
//    for (i = 1; i <= n; i++)
//    {
//        ret = ret * i;
//    }
//    return ret;
//}
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//    int b = F(n);
//    printf("%d", b);
//  
//   return 0;
//}
//int Fib(int n)
//{
//	int a = 1;
//	int b = 1;
//	int c = 1;
//	while (n > 2)
//	{
//		c = a + b;
//		a = b;
//		b = c;
//		n--;
//	}
//	return c;
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int F=Fib(n);
//	printf("%d\n", F);
//	return 0;
//
//}
//i/*nt D(int n)
//{
//	if (n <= 1)
//		return 1;
//	else
//		return D(n - 1) + D(n - 2);
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int ret = D(n);
//	printf("%d", ret);
////	return 0;
////}*/
//int main()
//{
//    int a = -10;
//    int b = a << 1;
//    printf("%d\n", b);
//    printf("%d\n", a);
//    return 0;
//
//}
//int main()
//{
//    int a = 2;
//    int b = 3;
//    printf("交换前：a=%d,b=%d", a, b);
//    a = a ^ b;
//    b = a ^ b;
//    a = a ^ b;
//    printf("交换后：a=%d,b=%d", a, b);
//    return 0;
//}
//int main()
//{
//	int a = 15;
//	int count = 0;
//	while (a)
//	{
//		if (a % 2 == 1)
//		{
//			count++;
//		}
//		a = a / 2;
//	}
//	printf("%d", count);
//	return 0;
//}
//int main()
//{
//	int a = 0;
//	int i = 0;
//	int count = 0;
//	scanf("%d", &a);
//	for (i = 0; i < 32; i++)
//	{
//		if ((a >> i) & 1 == 1)
//		{
//			count++;
//		}
//
//	}
//	printf("%d", count);
//	return 0;
//}
//int main()
//{
//	int a = 0;
//	int i = 0;
//	int count = 0;
//	scanf("%d", &a);
//	while (a)
//	{
//		count++;
//		a = a & (a - 1);
//	}
//	printf("%d", count);
//	return 0;
//}
////int main()
////{
////	int a = 0;
////	scanf("%d", &a);
////	if ((a & (a - 1)) == 0)
////	{
////		printf("yes");
////	}
////	else
////
////	{
////		printf("no");
////	}
////
////	return 0;
////}
//int main()
//{
//	int a = 0;
//	int n = ~a;
//	a:00000000000000000000000000000000
//	n:11111111111111111111111111111111
//	取反加1后，打印得到-1
//	printf("%d", n);
//	return 0;
//int main()
//{
//	int a = 13;
//	13的二进制表达式：00000000000000000000000000001101
//	将第五位0改为1：
//	a = a | (1 << 4);
//	printf("%d\n", a);
//	改回来：00000000000000000000000000011101
//	      & 11111111111111111111111111101111即可
//	即
//	a = a & ~(a << 4);
//	printf("%d", a);
//	return 0;
//}
//int main()
//{
//    char a = 5;
//    //5-int-4个字节，即32个bit
//    //00000000000000000000000000000101
//    //00000101-截断后存储到a中
//    char b = 127;
//        //00000000000000000000000001111111
//        //01111111-截断后存储在b中
//    //实际上char分signed char和unsigned char，但是c语言没有规定，只由编译器决定，在VS中，为signed char
//        char c = a + b;//发生整型提升
//    //a—00000101高位补0为00000000000000000000000000000101
//    //b-01111111高位补0为00000000000000000000000001111111
//    //相加为             00000000000000000000000010000100截断后放在c里面 即10000100
//    printf("%d", c);//%d是按照10进制的形式打印有符号整型
//    //10000100按照符号位补齐为：111111111111111111111111100000100
//        //取反+1为            100000000000000000000000011111100
//        //即为-124
//    return 0;
//}
//char* my_strcpy(char* dest, const char* src)
//{
//	char* ret = dest;
//	assert(dest);
//	assert(src);
//	while (*dest++ = *src++)
//	{
//		//赋值表达式，实际上while里面是*dest的值，最后*dest的值为\0的时候，由于\0的ascll码值为0，那么while不再循环
//		;
//	}
//	return ret;//把目标空间起始地址返回，以便访问
//}
//int main()
//{
//	char arr[] = "hello abc";
//	char arr1[20] = "xxxxxxxxxxxxxxxx";
//	printf("%s\n", my_strcpy(arr1, arr));
//	//根据上面函数的返回值即可形成链式访问的效果
//	return 0;
//}
//char* my_strcat(char* dest, const char* src)
//{
//    char* ret = dest;
//    while (*dest != '\0')
//    {
//        dest++;
//    }
//    while (*dest++ = *src++)
//    {
//        ;
//    }
//    return ret;
//}
//
//int main()
//{
//    char arr1[20] = "hello ";
//    char* p = "world";//常量字符串，p实际上存放的是w的地址
//    printf("%s", my_strcat(arr1,p));
//    return 0;
////}
//size_t my_strlen( const char* arr)
//{
//	assert(arr);
//	int count = 0;
//	char* start = arr;
//	while (*arr != '\0')
//	{
//		arr++;
//	}
//	return arr - start;
//}
//int main()
//{
//	char arr[] ="abcdef";
//	size_t len = my_strlen(arr);
//	printf("%zd", len);
//	return 0;
//
//}
//my_strcpy(char* str, const char* src)
//{
//	assert(str && src);
//	char* start = str;
//	while (*str++ = *src++)
//	{
//		;
//	}
//	return start;
//}
//int main()
//{
//	char arr1[20] = "xxxxxxxxx";
//	char arr2[] = "hello world";
//	printf("%s", my_strcpy(arr1, arr2));
//	return 0;
//}
//char* my_strcat(char* str, const char* src)
//{
//	char* ret = str;
//	assert(str && src);
//	while (*str != '\0')
//	{
//		str++;
//	}
//	while (*str++ = *src++)
//	{
//		;
//	}
//	return ret;
//}
//int main()
//{
//	char arr1[20] = "hello ";
//	char arr2[] = "world";
//	printf("%s", my_strcat(arr1, arr2));
//
//	return 0;
//}
//#include <stdio.h>
//int main()
//{
//	int a = 0, b = 0;
//	for (a = 1, b = 1; a <= 100; a++)
//	{
//		if (b >= 20) break;
//		if (b % 3 == 1)
//		{
//			b = b + 3;
//			continue;
//		}
//		b = b - 5;
//	}
//	printf("%d\n", a);
//	return 0;
//}
//int main()
//{
//	int a = 0;
//	int b = 0;
//	int c = 0;
//	while (scanf("%d %d %d", &a,&b,&c)!=EOF)
//	{
//		if (a + b > c || a + c > b || b + c > a)
//		{
//			if (a == b && b == c)
//			{
//				printf("Equilateral triangle!");
//			}
//			else if (a == b || a == c || b == c)
//			{
//				printf("Isosceles triangle!");
//			}
//			if (a != b && b != c&&a!=c)
//			{
//				printf("Ordinary triangle!");
//			}
//		}
//		else
//		{
//			printf("Not a triangle!");
//		}
//	}
//	return 0;
//}
//int main()
//{
//	int i = 0;
//	int r = 0;
//	for (i = 1; i <= 9; i++)
//	{
//		for (r = 1; r <= i; r++)
//		{
//			int count = r * i;
//			printf("%d*%d=%d ", r,i,count);
//		}
//		printf("\n");
//	}
//	return 0;
//}
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int i =0;
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//	int MAX = arr[0];
//	for (i = 0; i < 10; i++)
//	{
//		if (arr[i] > MAX)
//		{
//			MAX = arr[i];
//		}
//		
//	}
//	printf("%d", MAX);
//	return 0;
//}
//int main()
//{
//	int i = 0;
//	double sum = 0.0;
//	int flag = 1;
//	for (i = 1; i <= 100; i++)
//	{
//		sum = sum + 1.0 / i;
//		flag = -flag;
//		
//	}
//	printf("%1f", sum);
//	return 0;
//}
//int main()
//{
//	int count = 0;
//	int i = 0;
//	for (i = 0; i < 100; i++)
//	{
//		if ((i % 10 == 9) || (i / 10 == 9))
//		{
//			count++;
//		}
//	}
//	printf("%d", count);
//	return 0;
//}
#include<math.h>
//int main()
//{
//	int i = 0;
//	int count = 0;
//	for (i = 101; i <= 200; i += 2)
//	{
//		int flag = 1;
//		int j = 1;
//		for (j = 2; j <= sqrt(i); j++)
//		{
//			if (i % j == 0)
//			{
//				flag = 0;
//				break;
//			}
//			
//		}
//		if (flag == 1)
//		{
//			count++;
//		}
//	}
//	printf("%d", count);
//	return 0;
//}
//#include<math.h>//sqrt是库函数
//int main()
//{
//	int i = 0;
//	int count = 0;
//	for (i = 101; i <= 200; i += 2)
//	{
//		int flag = 1;
//		int j = 1;
//		for (j = 2; j <= sqrt(i); j++)
//		{
//			if (i % j == 0)
//			{
//				flag = 0;
//				break;
//			}
//		}
//		if (flag == 1)
//		{
//			count++;
//		}
//	}
//	printf("count=%d", count);
//	return 0;
//}
//#include <stdio.h>
//int main()
//{
//    char str[] = "hello bit";
//    printf("%d %d\n", sizeof(str), strlen(str));
//    return 0;
//}
/*int main()
{
	int i = 0;
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int sum = 0;
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (i = 0; i < 10; i++)
	{
		sum = sum + arr[i];
	}
	double Mean = sum / 10.0;
	printf("%d", Mean);
	/*return 0;*/
//}
//int my_strcmp(const char*str1,const char*str2)
//{
//	while (*str1 == *str2)
//	{
//		if (*str1 == '\0')
//			return 0;
//		
//			*str1++;
//			*str2++;
//		
//	}
//	return *str1 - *str2;
//}
//int main()
//{
//	int ret = my_strcmp("abc", "abc");
//	printf("%d", ret);
//	return 0;
//}
//int main()
//{
//	char arr1[10] = "xxxxxxxxxx";
//	char arr2[] = "ab";
//	strncpy(arr1, arr2,5);
//	printf("%s", arr1);
//	return 0;
//}
//const char* my_strstr(const char* str1, const char* str2)
//{   assert(str1);
//	assert(str2);
//	const char* cp = str1;
//	const char* s1 = NULL;
//	const char* s2 = NULL;
//	
//	while (*cp)
//	{
//		s1 = cp;
//		s2 = str2;
//		while (*s1 == *s2 && *s1 && *s2)
//		{
//			s1++;
//			s2++;
//		}
//		
//
//		if (*s2 == '\0')
//			return cp;
//
//		cp++;
//	}
//	return NULL;
//}
//int main()
//{
//	char arr1[] = "abbbcdef";
//	char arr2[] = "bbc";
//	char* ret = my_strstr(arr1, arr2);
//	if (ret != NULL)
//		printf("%s", ret);
//	else
//		printf("找不到");
//	return 0;
//}
//int main()
//{
//	char arr[] = "weicanbin@yeah.net";//@.即为分隔符
//	char buf[30] = { 0 };//创建临时拷贝的数组
//	strcpy(buf, arr);
//	char* p = "@.";
//	char* r = NULL;
//	for (r = strtok(buf,p); r != NULL; r = strtok(NULL, p))
//	{
//		printf("%s\n", r);
//	}
//	return 0;
//}
//char* my_strstr(const char* str1, const char* str2)
//{
//	assert(str1, str2);
//	const char* cp = str1;
//	const char* s1 = NULL;
//	const char* s2 = NULL;
//	if (*str2 == '\0')
//		return str1;//规定如果当子字符串为空字符串，直接返回str1
//	while (*cp)
//	{
//		s1 = cp;
//		s2 = str2;
//		while (*s1 == *s2 && *s1 && *s2)
//		{
//			s1++;
//			s2++;
//		}
//		if (*s2 == '\0')
//			return cp;
//		cp++;
//	}
//	return NULL;
//}
//int main()
//{
//	char arr1[] = "ccbbabcdefghi";
//	char arr2[] = "abg";
//	char* ret = my_strstr(arr1, arr2);
//	if (ret != NULL)
//	{
//		printf("%s", ret);
//	}
//	else
//		printf("找不到");
//	return 0;
//}
//int main()
//{
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		char* ret = strerror(i);
//		printf("%d: %s\n", i, ret);
//	}
//	return 0;
//}
/*#include<string.h>
#include<errno.h>
int main()
{
	FILE* pf = fopen("add.txt", "r");
	if (pf == NULL)
	{
		printf("打开文件失败，失败的原因:%s\n", strerror(errno));
		return 1;
	}
	else
	{
		printf("打开文件成功");
	}
	//retu*//*rn 0;*/
//}
#include<assert.h>
//void* my_memcpy(void* dest, const void* src, size_t num)
//{
//	assert(dest && src);
//	void* ret = dest;//memcpy函数返回的是目标空间的起始地址
//	while (num--)
//	{
//		*(char*)dest = *(char*)src;
//		dest = (char*)dest + 1;
//		src = (char*)src + 1;
//	}
//	return ret;
//}
//int main()
//{
//	int arr1[10] = { 0 };
//	int arr2[] = { 1,2,3,4,5,6,7,8 };
//	my_memcpy(arr1, arr2, 20);
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr1[i]);
//	}
//	return 0;
//}
//void* my_memmove(void* dest, const void* src, size_t num)
//{
//	void* ret = dest;
//	assert(dest && src);
//	if (dest < src)
//	{
//		while (num--)
//		{
//			*(char*)dest = *(char*)src;
//			dest = (char*)dest + 1;
//			src = (char*)src + 1;
//		}
//	}
//	else
//	{
//		while (num--)
//		{
//			//此时num=18
//			*((char*)dest + num) = *((char*)src + num);
//		}
//		return ret;
//	}
//}
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//    my_memmove(arr + 2, arr, 20);
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}
//int main()
//{
//	char arr1[] = "abcdef";
//	char arr2[] = "abqwegge";
//	int ret = memcmp(arr1, arr2, 3);
//	printf("%d", ret);
//	return 0;
//}
//int main()
//{
//	int arr1[] = { 1,2,3,4,5 };
//	int arr2[] = { 1,3,5,7,9 };
//	int ret = memcmp(arr1, arr2, 5);
//	printf("%d", ret);
//	return 0;
//}
//
    /*int main()
	{
	int arr1[] = { 1,0x01234503,3,4,5 };
	int arr2[] = { 1,3,5,7,9 };
	int ret = memcmp(arr1, arr2, 5);
	printf("%d", ret);
	return 0;
}*/
//int main()
//{
//	int n = 9;
//	float* pFloat = (float*)&n;
//	printf("n的值为：%d\n", n);
//	printf("*pFloat的值为：%f\n", *pFloat);
//	*pFloat = 9.0;
//	printf("num的值为：%d\n", n);
//	printf("*pFloat的值为：%f\n", *pFloat);
//	return 0;
//}
//int Add(int a, int b)
//{
//	int add = a + b;
//	return add;
//
//
//}
//int main()
//{
//	
//	int a = 10;
//	int b = 20;
//	int ret=Add(a, b);
//	printf("%d", ret);
//	return 1;
//}